/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DAO;

import Fachada.Fachada;
import LogicaNegocio.OportunidadNegocio;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Calendar;
import java.util.Vector;

/**
 *
 * @author L¡z
 */

public class DAOOportunidadNegocio
{
    Fachada fachada;

    public DAOOportunidadNegocio()
    {
        fachada = new Fachada();
    }
    
    public int guardarOportunidadNegocio(OportunidadNegocio oportunidadNegocio)
    {
        String sql_guardar;
        sql_guardar = "INSERT INTO OportunidadNegocio (id_oportunidad, estado_oportunidad, nivel_prioridad_oportunidad, descripcion_oportunidad, fecha_inicio_oportunidad, fecha_finalizacion_oportunidad, calificacion_oportunidad, id_cliente, cc_empleado) VALUES "
                      + "('"+oportunidadNegocio.getIdCasoSC()+"' , '"+oportunidadNegocio.getEstadoCasoSC()+"' , '"+oportunidadNegocio.getNivelPrioridadCasoSC()+"' , '"+oportunidadNegocio.getTipoCasoSC()+"' , '"+
                      oportunidadNegocio.getDescripcionCasoSC()+"' , '"+oportunidadNegocio.getFechaInicioCasoSC()+"' , '"+oportunidadNegocio.getFechaFinalizacionCasoSC()+"' , '"+oportunidadNegocio.getCalificacionCasoSC()+
                      "' , '"+oportunidadNegocio.getIdCliente()+"' , '"+oportunidadNegocio.getCcEmpleado()+"')";

        try {
            Connection conexion= fachada.ConexionBaseDatos();
            Statement sentencia=conexion.createStatement();
            int numFilas= sentencia.executeUpdate(sql_guardar);
            conexion.close();
            return numFilas;
        }
        catch(SQLException e) {
            System.out.println(e.toString());
        }
        catch(Exception e) {
            System.out.println(e.toString());
        }
        return -1;
    }

    public Vector <OportunidadNegocio> consultarOportunidadesNegocio()
    {
        String sql_select;
        sql_select = "SELECT * FROM OportunidadNegocio";
        Vector <OportunidadNegocio> oportunidadesNegocio = new Vector <OportunidadNegocio>();

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);

            while(tabla.next())
            {
                OportunidadNegocio laOportunidadNegocio = new OportunidadNegocio(tabla.getString(1),tabla.getString(2),tabla.getString(3),tabla.getString(4),tabla.getString(5),tabla.getString(6),tabla.getString(7),tabla.getString(8),tabla.getString(9));
                oportunidadesNegocio.addElement(laOportunidadNegocio);
            }
            conn.close();
            System.out.println("Conexion cerrada");
            return oportunidadesNegocio;
        }
        catch(SQLException e)
        {
            System.out.println(e);
            return null;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }

    public Vector <OportunidadNegocio> consultarOportunidadesNegocioPorRepresentante(String idRepresentante)
    {
        String sql_select;
        sql_select = "SELECT * FROM OportunidadNegocio WHERE cc_empleado = '" + idRepresentante + "'";
        Vector <OportunidadNegocio> oportunidadesNegocio = new Vector <OportunidadNegocio>();

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);

            while(tabla.next())
            {
                OportunidadNegocio laOportunidadNegocio = new OportunidadNegocio(tabla.getString(1),tabla.getString(2),tabla.getString(3),tabla.getString(4),tabla.getString(5),tabla.getString(6),tabla.getString(7),tabla.getString(8),tabla.getString(9));
                oportunidadesNegocio.addElement(laOportunidadNegocio);
            }
            conn.close();
            System.out.println("Conexion cerrada");
            return oportunidadesNegocio;
        }
        catch(SQLException e)
        {
            System.out.println(e);
            return null;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }

    public int modificarEstadoOportunidadNegocio(OportunidadNegocio oportunidadNegocio)
    {
        String sql_modificar;
        sql_modificar = "UPDATE OportunidadNegocio "+
                        "SET  estado_oportunidad = '" + oportunidadNegocio.getEstadoCasoSC()+ "' " +
                        "WHERE id_oportunidad = '" + oportunidadNegocio.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }
    
    public int modificarNivelPrioridadOportunidadNegocio(OportunidadNegocio oportunidadNegocio)
    {
        String sql_modificar;
        sql_modificar = "UPDATE OportunidadNegocio "+
                        "SET  nivel_prioridad_oportunidad = '" + oportunidadNegocio.getNivelPrioridadCasoSC()+ "' " +
                        "WHERE id_oportunidad = '" + oportunidadNegocio.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarDescripcionOportunidadNegocio(OportunidadNegocio oportunidadNegocio)
    {
        String sql_modificar;
        sql_modificar = "UPDATE OportunidadNegocio "+
                        "SET  descripcion_oportunidad = '" + oportunidadNegocio.getDescripcionCasoSC()+ "' " +
                        "WHERE id_oportunidad = '" + oportunidadNegocio.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarFechaInicioOportunidadNegocio(OportunidadNegocio oportunidadNegocio)
    {
        String sql_modificar;
        sql_modificar = "UPDATE OportunidadNegocio "+
                        "SET  fecha_inicio_oportunidad = '" + oportunidadNegocio.getFechaInicioCasoSC()+ "' " +
                        "WHERE id_oportunidad = '" + oportunidadNegocio.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarFechaFinalizacionOportunidadNegocio(OportunidadNegocio oportunidadNegocio)
    {
        String sql_modificar;
        sql_modificar = "UPDATE OportunidadNegocio "+
                        "SET  fecha_finalizacion_oportunidad = '" + oportunidadNegocio.getFechaFinalizacionCasoSC()+ "' " +
                        "WHERE id_oportunidad = '" + oportunidadNegocio.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarCalificacionOportunidadNegocio(OportunidadNegocio oportunidadNegocio)
    {
        String sql_modificar;
        sql_modificar = "UPDATE OportunidadNegocio "+
                        "SET  calificacion_oportunidad = '" + oportunidadNegocio.getCalificacionCasoSC()+ "' " +
                        "WHERE id_oportunidad = '" + oportunidadNegocio.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarIdClienteOportunidadNegocio(OportunidadNegocio oportunidadNegocio)
    {
        String sql_modificar;
        sql_modificar = "UPDATE OportunidadNegocio "+
                        "SET  id_cliente = '" + oportunidadNegocio.getIdCliente()+ "' " +
                        "WHERE id_oportunidad = '" + oportunidadNegocio.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarIdEmpleadoOportunidadNegocio(OportunidadNegocio oportunidadNegocio)
    {
        String sql_modificar;
        sql_modificar = "UPDATE OportunidadNegocio "+
                        "SET  cc_empleado = '" + oportunidadNegocio.getCcEmpleado()+ "' " +
                        "WHERE id_oportunidad = '" + oportunidadNegocio.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int eliminarOportunidadNegocio(String idOportunidadNegocio)
    {
        String sql_modificar;
        sql_modificar = "DELETE FROM OportunidadNegocio "+
                        "WHERE id_oportunidad = " + "'" +idOportunidadNegocio + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public OportunidadNegocio consultarOportunidadNegocio(String id)
    {
        String sql_select;
        sql_select = "SELECT * FROM OportunidadNegocio WHERE id_oportunidad = '" + id + "'";
        OportunidadNegocio oportunidadNegocio = null;

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);

            while(tabla.next())
            {
                oportunidadNegocio = new OportunidadNegocio(tabla.getString(1),tabla.getString(2),tabla.getString(3),tabla.getString(4),tabla.getString(5),tabla.getString(6),tabla.getString(7),tabla.getString(8),tabla.getString(9));
                
            }
            conn.close();
            System.out.println("Conexion cerrada");
            return oportunidadNegocio;
        }
        catch(SQLException e)
        {
            System.out.println(e);
            return null;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }

    public Vector<OportunidadNegocio> consultarOportunidadesPorFecha(String inicio, String fin)
    {
        String sql_select;
        sql_select =  "SELECT estado_oportunidad, COUNT(*) AS Cantidad FROM OportunidadNegocio ";
        sql_select += "WHERE fecha_inicio_oportunidad BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY estado_oportunidad";
        Vector <OportunidadNegocio> oportunidadesNegocio = new Vector <OportunidadNegocio>();

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);

            while(tabla.next())
            {
                OportunidadNegocio laOportunidadNegocio = new OportunidadNegocio(tabla.getString(1),tabla.getString(2), "", "", "", "", "", "", "");
                oportunidadesNegocio.addElement(laOportunidadNegocio);
            }
            conn.close();
            System.out.println("Conexion cerrada");
            return oportunidadesNegocio;
        }
        catch(SQLException e)
        {
            System.out.println(e);
            return null;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }

    public Vector<OportunidadNegocio> consultarOportunidadesNuevasRepresentante()
    {
        Calendar cal = Calendar.getInstance();
        String fechaActual = cal.get(Calendar.DAY_OF_MONTH) + "/" + (cal.get(Calendar.MONTH)+1) + "/" + cal.get(Calendar.YEAR);
        String fechaAntigua = cal.get(Calendar.DAY_OF_MONTH) + "/";
        if(cal.get(Calendar.MONTH) == 0) {
            fechaAntigua += 12 + "/" + (cal.get(Calendar.YEAR)-1);
        }
        else {
            fechaAntigua += cal.get(Calendar.MONTH) + "/" + cal.get(Calendar.YEAR);
        }
        String sql_select;
        sql_select =  "SELECT cc_empleado, COUNT(*) AS Cantidad FROM OportunidadNegocio ";
        sql_select += "WHERE fecha_inicio_oportunidad BETWEEN '" + fechaAntigua + "' AND";
        sql_select += " '" + fechaActual + "' GROUP BY cc_empleado";
        Vector <OportunidadNegocio> oportunidadesNegocio = new Vector <OportunidadNegocio>();

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);

            while(tabla.next())
            {
                OportunidadNegocio laOportunidadNegocio = new OportunidadNegocio(tabla.getString(1),tabla.getString(2),"","","","","","","");
                oportunidadesNegocio.addElement(laOportunidadNegocio);
            }
            conn.close();
            System.out.println("Conexion cerrada");
            return oportunidadesNegocio;
        }
        catch(SQLException e)
        {
            System.out.println(e);
            return null;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }

    public Vector<OportunidadNegocio> consultarGenerica(String inicio, String fin, String estado, String prioridad, String calificacion) {
        /* Agregar la opción de eliminar ciertas cosas cuando no apliquen*/

        String sql_select;
        sql_select =  "SELECT * FROM OportunidadNegocio ";
        sql_select += "WHERE ";
        sql_select += "fecha_inicio_oportunidad BETWEEN '" + inicio + "' AND '" + fin + "'";
        if(!estado.equals("")) {
            sql_select += " AND estado_oportunidad= '" + estado + "'";
        }
        if(!prioridad.equals("")) {
            sql_select += " AND nivel_prioridad_oportunidad = '" + prioridad + "'";
        }
        if(!prioridad.equals("")) {
            sql_select += " AND calificacion_oportunidad = '" + calificacion + "'";
        }
        sql_select += " ORDER BY cc_empleado ASC";
        Vector <OportunidadNegocio> oportunidadesNegocio = new Vector <OportunidadNegocio>();

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);

            while(tabla.next())
            {
                OportunidadNegocio laOportunidadNegocio = new OportunidadNegocio(tabla.getString(1),tabla.getString(2),tabla.getString(3),tabla.getString(4),tabla.getString(5),tabla.getString(6),tabla.getString(7),tabla.getString(8),tabla.getString(9));
                oportunidadesNegocio.addElement(laOportunidadNegocio);
            }
            conn.close();
            System.out.println("Conexion cerrada");
            return oportunidadesNegocio;
        }
        catch(SQLException e)
        {
            System.out.println(e);
            return null;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }

    public Vector<OportunidadNegocio> consultarOportunidadesGanadasPerdidas(String cc_empleado) {
        String sql_select;
        sql_select =  "SELECT estado_oportunidad, COUNT(*) AS Cantidad FROM (SELECT estado_oportunidad FROM OportunidadNegocio WHERE (estado_oportunidad = 'Negocio ganado' OR estado_oportunidad = 'Negocio perdido') AND cc_empleado = '"+cc_empleado+"') GROUP BY estado_oportunidad";
        Vector <OportunidadNegocio> oportunidadesNegocio = new Vector <OportunidadNegocio>();

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);

            while(tabla.next())
            {
                OportunidadNegocio laOportunidadNegocio = new OportunidadNegocio(tabla.getString(1),tabla.getString(2), "", "", "", "", "", "", "");
                oportunidadesNegocio.addElement(laOportunidadNegocio);
            }
            conn.close();
            System.out.println("Conexion cerrada");
            return oportunidadesNegocio;
        }
        catch(SQLException e)
        {
            System.out.println(e);
            return null;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }
}
